package br.com.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import br.com.jdbc.Conexao;
import br.com.model.Usuario;

public class UsuarioDAO {
	
	private Connection con = Conexao.getConnection();
	
	public void cadastrar(Usuario usuario){
		
		String sql = "INSERT INTO usuario (nome,login,senha) values (?,?,?)";
		
		try {
			PreparedStatement preparador = con.prepareStatement(sql);
			
			preparador.setString(1, usuario.getNome());
			preparador.setString(2, usuario.getLogin());
			preparador.setString(3, usuario.getSenha());
			
			preparador.execute();
			preparador.close();
			
			System.out.println("Cadastrado com sucesso!");
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
	}
	
public void alterar(Usuario usuario){
		
		String sql = "UPDATE usuario SET nome=?,login=?,senha=? where id=?";
		
		try {
			PreparedStatement preparador = con.prepareStatement(sql);
			
			preparador.setString(1, usuario.getNome());
			preparador.setString(2, usuario.getLogin());
			preparador.setString(3, usuario.getSenha());
			preparador.setInt(4, usuario.getId());
			
			preparador.execute();
			preparador.close();
			
			System.out.println("Alterado com sucesso!");
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
	}
	public void excluir(Usuario usuario){
		
		String sql = "DELETE FROM usuario where id=?";
		
		try {
			PreparedStatement preparador = con.prepareStatement(sql);
			
			
			preparador.setInt(1, usuario.getId());
			
			preparador.execute();
			preparador.close();
			
			System.out.println("Excluído com sucesso!");
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
	}
	public void salvar(Usuario usuario){
			
			if(usuario.getId()!=null && usuario.getId()>0){
				alterar(usuario);
			}else{
				cadastrar(usuario);
			}
			
		} 
	public List<Usuario> buscarTodos(){
		
		//instancia da lista
		List<Usuario> lista =  new ArrayList<Usuario>();
		// Comando SQL
				String sql = "select * from usuario order by id";
				// Statments
				try {
					PreparedStatement preparadorSQL = con.prepareStatement(sql);
					// Commit no banco
					ResultSet res = preparadorSQL.executeQuery();
					//Tirando do Resultset e colocando no objeto usuario
					while(res.next()){
						Usuario usuario =  new Usuario();
						usuario.setId(res.getInt("id") );
						usuario.setNome(res.getString("nome") );
						usuario.setLogin(res.getString("login"));
						usuario.setSenha(res.getString("senha"));
						lista.add(usuario);
					}
					preparadorSQL.close();
				} catch (SQLException e) {
					//
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				return lista;
	}
	/**
	 * Busca por login e senha de Usuario
	 * @param usuario Objeto com login e senha a ser consultado no banco
	 * @return Null quando não encontra no banco ou um Ponteiro a um objeto usuario completo quando encontra 
	 */
	public Usuario autenticar(Usuario usuario){
		// Comando SQL
				String sql = "select * from usuario where login=? and senha=?";
				// Statments
				try {
					PreparedStatement preparadorSQL = con.prepareStatement(sql);
					preparadorSQL.setString(1, usuario.getLogin());
					preparadorSQL.setString(2, usuario.getSenha());
					
					// Commit no banco
					ResultSet res = preparadorSQL.executeQuery();
					
					//Tirando do Resultset e colocando no objeto usuario
					if(res.next()){
						
						Usuario usu =  new Usuario();
						usu.setId(res.getInt("id") );
						usu.setNome(res.getString("nome") );
						usu.setLogin(res.getString("login"));
						usu.setSenha(res.getString("senha"));
						return usu;
					}
					
					preparadorSQL.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				return null;
	}

	public Usuario buscarPorId(int id){
		// Comando SQL
				String sql = "select * from usuario where id=?";
				// Statments
				try {
					PreparedStatement preparadorSQL = con.prepareStatement(sql);
					preparadorSQL.setInt(1, id);
					// Commit no banco
					ResultSet res = preparadorSQL.executeQuery();
					
					//Tirando do Resultset e colocando no objeto usuario
					if(res.next()){
						
						Usuario usuario =  new Usuario();
						usuario.setId(res.getInt("id") );
						usuario.setNome(res.getString("nome") );
						usuario.setLogin(res.getString("login"));
						usuario.setSenha(res.getString("senha"));
						return usuario;
					}
					
					preparadorSQL.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				return null;
	}


}
